package nekperu15739.me.persistence.dao.abstracts.jdbctemplate;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import nekperu15739.me.persistence.dao.interfaces.DaoJpa;
import nekperu15739.me.persistence.dao.interfaces.jdbctemplate.DaoJdbcTemplate;
import nekperu15739.me.persistence.dto.mapper.LanguageDtoRowMapper;
import nekperu15739.me.persistence.entities.LanguageEntity;

public abstract class DaoAbstractJdbcTemplate<D, E> implements DaoJdbcTemplate<D, E> {

    protected JdbcTemplate jdbcTemplate;
    
    protected RowMapper<E> entityRowMapper;
    
    protected Object[] args;

   
//    @Override
//        <E> E org.springframework.jdbc.core.JdbcTemplate.queryForObject(String sql, Object[] args, RowMapper<E> rowMapper) throws DataAccessException
    /*
    public E select(E entity) {
        String languaje = "es";
        setArgs(entity);
        E queryForObject = getJdbcTemplate().queryForObject(queryLanguajeById, getArgs(), getEntityRowMapper());
        return null;
    }
    */
    
//    @SuppressWarnings("unchecked")
    @Override
    public D select(String sql, Object[] args,
            RowMapper<D> rowMapper) {
        D queryForObject = getJdbcTemplate().queryForObject(sql, args, rowMapper);

        return queryForObject;
    }
    
//    @Override
//    public void insert(E entity) {
//
//    }
//
//    @Override
//    public E update(E entity) {
//        return null;
//    }
//
//    @Override
//    public void delete(E entity) {
//
//    }
//
//    @Override
//    public void flush() {
//
//    }

    protected JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
    
    protected abstract void setJdbcTemplate(JdbcTemplate jdbcTemplate);
    
//    @Autowired
//    protected void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
//        this.jdbcTemplate = jdbcTemplate;
//    }

//    protected void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
//        this.jdbcTemplate = jdbcTemplate;
//    }

    protected abstract RowMapper<E> getEntityRowMapper();
//        protected RowMapper<E> getEntityRowMapper() {
//        return entityRowMapper;
//    }

    protected abstract void setEntityRowMapper(RowMapper<E> entityRowMapper);
//        protected void setEntityRowMapper(RowMapper<E> entityRowMapper) {
//        this.entityRowMapper = entityRowMapper;
//    }

    public Object[] getArgs() {
        return args;
    }

    public void setArgs(E entity) {
        this.args = args;
    }

}
